package com.igeek.compus.backend.singleton;

import cn.hutool.db.Db;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;

public class Test {

    public static void main(String[] args) {
//        for(int i = 0; i < 10; i++) {
//            new Thread(()->{
//                System.out.println(LazySingleTon.getInstance());
//            }).start();
//        }

        /**
         * 攻破单例模式
         * 1.反射
         * 2.序列化
         */
//        LazySingleTon instance = LazySingleTon.getInstance();
//        System.out.println(instance);
//
//        try {
//            // 获得默认的构造方法
//            Constructor<? extends LazySingleTon> declaredConstructor = instance.getClass().getDeclaredConstructor();
//            // 破坏private权限
//            declaredConstructor.setAccessible(true);
//            // 通过反射调用构造方法创建一个新的对象
//            LazySingleTon lazySingleTon = declaredConstructor.newInstance();
//            System.out.println(lazySingleTon);
//        }catch (Exception e) {
//            e.printStackTrace();
//        }

//        try {
//            LazySingleTon instance = LazySingleTon.getInstance();
//            System.out.println(instance);
//
//            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("obj.txt"));
//            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("obj.txt"));
//
//            objectOutputStream.writeObject(instance);
//            LazySingleTon lazySingleTon = (LazySingleTon) objectInputStream.readObject();
//
//            System.out.println(lazySingleTon);
//        }catch (Exception e) {
//            e.printStackTrace();
//        }

//        System.out.println(EnumSingleTon.getInstance());
//        System.out.println(EnumSingleTon.getInstance());

//        DbConfig dbConfig = DbConfig.getInstance();
//        System.out.println(dbConfig.getProperty("db.name"));

        EnumDbConfig enumDbConfig = EnumDbConfig.getInstance();
        System.out.println(enumDbConfig.getProperty("db.name"));
    }
}
